/**
 * Copyright(c) 2014 Xunton Solutions
 *
 * History:
 *   15-1-27 上午9:40 Created by dwzhang
 */
package com.jade.framework.mom;

import java.util.List;

import com.jade.framework.base.context.ApplicationContextUtils;

/**
 * 消息队列工具类。
 *
 * @author <a href="mailto:dwzhang@xunton.com">dwzhang</a> 
 * @version 1.0 15-1-27 上午9:40
 */
public class MomUtils
{
    protected static MomService momService = null;

    public static MomService getService()
    {
        if (momService == null) {
            momService = ApplicationContextUtils.getBean("system_momService");
        }
        return momService;
    }

    /**
     * 发送消息。
     *
     * @param topic      消息主题
     * @param key        消息key
     * @param tag        消息标签
     * @param delayLevel 延迟级别
     * @param msg        消息体
     * @return 消息发送结果
     * @throws MomException 消息发送异常
     */
    public static MomSendResult send(String topic, String key, String tag, int delayLevel, Object msg)
            throws MomException
    {
        return getService().send(topic, key, tag, delayLevel, msg);
    }

    /**
     * 发送消息。
     *
     * @param message 消息对象
     * @return 消息发送结果
     * @throws MomException 消息发送异常
     */
    public static MomSendResult send(MomMessage message)
            throws MomException
    {
        return getService().send(message);
    }

    /**
     * 发送消息。
     *
     * @param message  消息对象
     * @param callback 发送回调器
     * @throws MomException 消息发送异常
     */
    public static void send(MomMessage message, MomSendCallback callback)
            throws MomException
    {
        getService().send(message, callback);
    }

    /**
     * 根据消息ID获取消息。
     *
     * @param topic 消息主题
     * @param msgId 消息ID
     * @return 消息对象
     * @throws MomException 查询异常
     */
    public static MomMessage getMessage(String topic, String msgId)
            throws MomException
    {
        return getService().getMessage(topic, msgId);
    }

    /**
     * 根据消息Key获取消息。
     *
     * @param topic  消息主题
     * @param key    消息key
     * @param maxNum 最大数目
     * @return 消息列表
     * @throws MomException 查询异常
     */
    public static List<MomMessage> listMessage(String topic, String key, int maxNum)
            throws MomException
    {
        return getService().listMessage(topic, key, maxNum);
    }

    /**
     * 根据消息Key获取消息，如果应用中key是唯一的，那么采用这个方法。
     *
     * @param topic 消息主题
     * @param key   消息key
     * @return 消息对象。
     * @throws MomException 查询异常
     */
    public static MomMessage getSingleMessage(String topic, String key)
            throws MomException
    {
        return getService().getSingleMessage(topic, key);
    }

    /**
     * 根据主题获取生产者。
     *
     * @param topic 消息主题
     * @return 消息生产者
     */
    public static MomProducer getProducer(String topic)
    {
        return getService().getProducer(topic);
    }

    /**
     * 根据主题获取消费者。
     *
     * @param topic 消息主题
     * @return 消息消费者。
     */
    public static MomConsumer getConsumer(String topic)
    {
        return getService().getConsumer(topic);
    }

    /**
     * 添加消息生产者。
     *
     * @param topic    消息主题
     * @param producer 消息生产者者。
     */
    public static void addProducer(String topic, MomProducer producer)
    {
        getService().addProducer(topic, producer);
    }

    public static void startProducer(String topic)
    {
        getService().startProducer(topic);
    }

    public static void stopProducer(String topic)
    {
        getService().stopProducer(topic);
    }

    /**
     * 添加消息消费者。
     *
     * @param topic    消息主题。
     * @param consumer 消息消费者。
     */
    public static void addConsumer(String topic, MomConsumer consumer)
    {
        getService().addConsumer(topic, consumer);
    }

    public static void startConsumer(String topic)
    {
        getService().startConsumer(topic);
    }

    public static void stopConsumer(String topic)
    {
        getService().stopConsumer(topic);
    }
}
